﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;

namespace 反射实例
{
    class Example
    {
        public int a;
        public int b;
        private double c;
        public double D
        {
            set { }
            get { return c; }
        }
        public void Text(string s)
        {
            Console.WriteLine(s);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Example example = new Example();
            Type t = example.GetType();   //将对象t关联到指定类Example
            Console.WriteLine(t.Name);    //显示当前关联类名
            Console.WriteLine(t.Namespace);    //显示关联类的命名空间
            Console.WriteLine(t.FullName);     //显示当前关联类的全名
            Console.WriteLine(t.BaseType);     //显示当前关联类基类名
            BindingFlags bflag = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.Static;     //定义对象t搜查成员，即所以共有，非公有和静态成员，不包括基类成员
            MemberInfo[] m = t.GetMembers(bflag);  //Type类的GetMembers（）方法可以用于获取指定类的成员。该方法有多种重载实现，使用枚举类型BindingFlags的不同枚举值作为参数，根据参数不同获取指定类的不同成员。
            //GetMembers（）如果没有参数，则默认显示所以共有成员，除了Example中的共有成员外，还包括基类中的共有成员
            foreach (MemberInfo x in m)
                Console.WriteLine(x.Name + " " + x.MemberType);
        }
    }
}
